'use strict'

class content {

  constructor () {
    //param默认就是/:id，若要改变路由，则可以设置此属性，比如设置为/:name
    this.param = '/:id'
  }

  //以下方法，若不需要，要去掉，避免无意义的路由。


  /**
   * 获取文章的详情
   * @param {context} c
   * @returns 
   */
  async get (c) {
    //数据库常用的操作：增(insert)、删(delete)、改(update)、查(select)
    // 条件(where)、排序(order)
    //对于数据库模型而言，它会把所有数据库的操作封装为方法
    let r = await c.service.content.where('id', c.param.id).where('is_delete', 0).get(['id', 'title', 'detail', 'create_time'])
    if (!r) {
        return c.status(404)
    }
    c.send(r)
  }

  /**
   * 创建资源
   * @param {context} c
   * @returns 
   */
  async post (c) {
    //提交的格式的转换 -- 中间件
    c.body.create_time = c.body.update_time = Date.now()

    // 用户提交过来的数据 c.body，只需要将c.body插入到数据库中
    let r = await c.service.content.returning(['id', 'title']).insert(c.body)
    if (r){
      return c.send(r)
    }
    return c.status(400).send('insert faild')
  }

  /**
   * 更新资源
   * @param {context} c
   * @returns 
   */
  async put (c) {

  }

  /**
   * 获取列表
   * @param {context} c
   * @returns 
   */
  async list (c) {
    let clist = await c.service.content.where('is_delete', 0).order('create_time', 'desc').select(['id', 'title', 'create_time'])
    c.send(clist)
  }

  /**
   * 删除资源
   * @param {context} c
   * @returns 
   */
  async delete (c) {
    // is_delete 0 1
    let real_delete = c.query.real ? 1 : 0
    let count = 0
    if (real_delete) {
        // is_delete = 1 已经放在了回收站，需要真的删除
        count = await c.service.content
            .where('id', c.param.id)
            .delete()
    } else {
        // is_delete = 0 在文章列表中移除，放在回收站中，改变is_delete的值为1
        count = await c.service.content
            // where('id = ? AND id_delete = ?',[c.param.id,0]) 
            .where('id', c.param.id)
            .update({ is_delete: 1 })
    }
    c.send({ count })
  }

  // __mid() {
  //   return [];
  // }
}

module.exports = content